package com.cskaoyan.javase.thread._2api;

/**
 * 线程礼让
 * public static native void yield();
 * 在JDK文档中，该方法的作用完整描述是：
 *      暂停当前正在执行的线程，并执行其他线程。
 *      所以它翻译成礼让,就是当前线程不执行了,让其他线程执行
 *
 * 所谓的线程礼让,并不是说一定就会把CPU执行权礼让给另一个线程
 * 而是礼让出来执行权,大家再一起抢执行权
 * 这时就有两种可能了:
 *      1.该线程再次抢到执行权,礼让没有成功
 *      2.其他线程确实抢到了执行,礼让成功了
 *
 * @since 09:57
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class YieldDemo {
    public static void main(String[] args) {
        // 主线程
        ThreadB t = new ThreadB("张三");
        t.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("6666666666666!");
            // try {
            //     Thread.sleep(1000);
            // } catch (InterruptedException e) {
            //     e.printStackTrace();
            // }
            // 互相礼让
            Thread.yield();
        }
    }
}

class ThreadB extends Thread {
    public ThreadB() {
    }

    public ThreadB(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName() + "hello world!");
            // 每打印一次hello world就礼让一次
            Thread.yield();
        }
    }
}
